const Base = require('./base.js');

module.exports = class extends Base {
  /**
     * 获取用户列表
     * @api {GET} /user/index 获取用户列表
     * @apiDescription 获取用户列表
     * @apiName index
     * @apiHeader {String} token 用户授权token
     * @apiSampleRequest /user/index
     * @apiErrorExample {json} 请求错误返回信息示例:
     *             {
     *                 "errno": 1000,
     *                 "errmsg": "请求必须带token"
     *             }
     * @apiGroup User
     * @apiVersion 0.0.1
     */
  async indexAction() {
    const model = this.model('user');// controller 里实例化模型
    const data = await model.limit(3).select();

    if (think.isEmpty(data)) {
      return this.fail(1002, '没有数据');
    } else {
      return this.success(data, '请求成功！');
    }

    // return this.display();
  }

  /**
     * 用户登录
     * @api {POST} /user/login 用户登录
     * @apiDescription 用户登录
     * @apiName login
     * @apiSampleRequest /user/login
     * @apiParamExample {json} 请求示例:
     *              {
     *                  "username":"test",
     *                  "password":"test"
     *              }
     * @apiParam {String}  username 用户名
     * @apiParam {String}  password 密码
     * @apiErrorExample {json} 请求错误返回信息示例:
     *             {
     *                 "errno": 1002,
     *                 "errmsg": "用户名或密码错误"
     *             }
     * @apiSuccess {String} errno 返回错误码为:0.
     * @apiSuccess {String} errmsg  返回信息为:登录成功.
     * @apiSuccess {String} data  返回包含生成的token,用来后续带token访问api.
     * @apiGroup User
     * @apiVersion 0.0.1
     */
  async loginAction() {
    if (this.isPost) { // 如果是 POST 请求
      const userModel = this.model('user');
      const userinfo = this.post();
      let condition = {
        username: 'wys'
      };
      condition = userinfo;
      const data = await userModel.where(condition).find();
      if (think.isEmpty(data)) {
        return this.fail(1002, '用户名或密码错误');
      }
      // 实例化token业务类，没有任何参数
      const tokenService = think.service('token');
      const token = tokenService.createToken(userinfo);
      const result = {
        token: token
      };
      console.log('用户：' + userinfo.username + ' 在 ' + new Date().toLocaleString() + ' 进行了登录');
      return this.success(result, '登录成功！');
    }
  }

  /**
     * 获取用户ip
     * @api {GET} /user/ip 获取用户ip
     * @apiDescription 获取用户ip
     * @apiName ip
     * @apiHeader {String} token 用户授权token
     * @apiSampleRequest /user/ip
     * @apiErrorExample {json} 请求错误返回信息示例:
     *             {
     *                 "errno": 1000,
     *                 "errmsg": "请求必须带token"
     *             }
     * @apiGroup User
     * @apiVersion 0.0.1
     */
  ipAction() {
    const ip = this.ctx.ip; // 获取用户ip
    const data = {
      ip: ip
    };
    return this.success(data, '获取用户ip成功！');
  }

  __call() {
    // 如果相应的Action不存在则调用该方法
    return this.fail(404, '您访问的方法不存在');
  }

  // 定时任务1
  userCronAction() {
    if (!this.isCli) {
      return this.fail(1000, '非定时任务请求，拒绝访问');
    }
    console.log('user的cronAction定时任务执行了...' + new Date().toLocaleString());
  }
  // 定时任务2
  userCron2Action() {
    if (!this.isCli) {
      return this.fail(1000, '非定时任务请求，拒绝访问');
    }
    console.log('user的cron2定时任务执行了...' + new Date().toLocaleString());
  }
};
